package test.converter;

import com.google.common.base.CaseFormat;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Created by aceyin on 15/7/12.
 */
public class CaseConverter {

    static {
        ConvertUtils.register(new DateConverter(), Date.class);
    }

    /**
     * 将从数据库获取到的一个 map 对象转换成一个Bean。
     *
     * @param data - 一个从Mybatis直接得到的Map对象，key是字段的名字，value是字段的值。
     * @param clzz
     * @param <T>
     * @return
     */
    public static <T> T fill(Map<String, Object> data, Class<T> clzz) {
        try {
            T t = clzz.newInstance();
            BeanUtils.populate(t, data);
            return t;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将一个MAP里面的key由下划线风格转换成camelCase风格。
     *
     * @param result
     * @return
     */
    public static Map<String, Object> toCamelCase(final Map<String, Object> result) {
        Map<String, Object> map = new HashMap<>();
        Set<String> keys = result.keySet();
        for (String key : keys) {
            Object value = result.get(key);
            if (key.indexOf("_") >= 0) {
                String newKey = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, key);
                map.put(newKey, value);
            } else {
                map.put(key, value);
            }
        }

        return map;
    }
}
